﻿using System.Diagnostics;
using System.Windows;

namespace 装饰模式
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    /// 在软件开发中，我们经常想要对一类对象添加不同的功能，
    /// 例如要给手机添加贴膜，手机挂件，手机外壳等，如果此时利用继承来实现的话，
    /// 就需要定义无数的类，如StickerPhone（贴膜是手机类）、
    /// AccessoriesPhone（挂件手机类）等，这样就会导致 ”子类爆炸“问题，
    /// 为了解决这个问题，我们可以使用装饰者模式来动态地给一个对象添加额外的职责。
    /// 下面让我们看看装饰者模式。
    /// 
    /// 
    /// 以苹果手机举例：
    /// 想要苹果手机添加贴膜和挂件，正常做法建立带贴膜的手机和带挂件的手机的类，苹果手机继承他们去完成，为苹果手机的装饰，造成“子类爆炸”（解释上面）
    /// 
    /// 建立装饰类（抽象类），因为时为Phone装饰，所以要继承Phone，重写Phone中的Print()方法，同时获取Phone对象，具体装饰类继承装饰类，实现Print()方法
    /// 并添加装饰。
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Phone phone=new ApplePhone();
            Decorator decorator=new Accessories(phone);
            decorator.Print();
            Debug.WriteLine("=====================");
            Decorator decorator1 = new Sticker(phone);
            decorator1.Print();
        }
    }
}
